home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Day Cry
/
Day Cry CD.bin
/
oh_towns
/
ugoku
/
src.lzh
/
MOVDEMO
/
MOVDEMO.C
< prev
next >
Wrap
Text File
|
1994-09-09
|
18KB
|
747 lines
/*
MOV SYSTEM DEMO PLAY
Hiroshi TODA
1992 2/7
*/
#include <stdio.h>
#include <stdlib.h>
#include <egb.h>
#include <mos.h>
#include <cdrfrb.h>
#include <snd.h>
#include "video.h"
#include "ugoku.h"
#define C_WT 0x7fff /* âJü[â\âï color */
#define C_PL 0 /* Åëè·âvâîü[âô color */
#define C_FL 0x303030 /* files back color */
#define C_COLOR 15 /* Command color palette */
#define W_COLOR 8 /* Window color palette */
#define B_COLOR 7 /* Back color palette */
#define E_COLOR 10 /* ERROR color palette */
#define P_COLOR 12 /* PLAY color palette */
extern unsigned int VSYNC_counter; /* vsync counter */
int sw = 0, cx = 0, cy = 0; /* MOUSE data */
char directory[100] ;
char newDirectory[100] ;
char otherDriveDirectory[100] ;
int driveNum ;
char para[256]; /* PARAM */
char gwork[1024]; /* Ä⌐ë╞É╗ graphic work */
char swork[16384]; /* SND work */
char ework[1536]; /* EGB work */
char mwork[4096]; /* MOUSE work */
void ini()
{
extern int getCurrentDisk() ;
/* extern int get_directory( int drive, char *path_name_address ); */
SND_init(swork);
SND_elevol_init();
SND_elevol_mute(0x03);
SND_elevol_set( 1, 127, 127 );
EGB_init(ework,1536); /* graph ini */
EGB_resolution(ework,0,10); /* 2ëµû╩ìçɼ */
EGB_resolution(ework,1,10);
EGB_displayPage(ework,0,3);
EGB_writePage(ework,0); /* ëµû╩0É▌ÆΦ */
EGB_displayStart(ework,2,2,2);
EGB_displayStart(ework,3,320,240);
EGB_writePage(ework,1); /* ëµû╩1É▌ÆΦ */
EGB_displayStart(ework,2,2,2);
EGB_displayStart(ework,3,320,240);
// MOS_start(mwork,4096); /* mouse ini */
// MOS_resolution(0,10);
// MOS_resolution(1,3);
// MOS_writePage(1);
// MOS_horizon(0,639);
// MOS_vertical(0,479);
// MOS_disp(0);
// MOS_setpos( 320, 240 );
DWORD(para+0) = 0; /* key ini */
keyin(gwork,para);
DWORD(para+0) = 0x0200; /* ASCII code */
DWORD(para+4) = 0;
DWORD(para+8) = 0;
DWORD(para+12) = 0;
keyin(gwork,para);
int drv ;
drv = getCurrentDisk() ;
driveNum = drv ;
directory[0] = 0x41 + drv ;
directory[1] = ':' ;
directory[2] = '\\' ;
get_directory( drv + 1, directory + 3 );
otherDriveDirectory[0] = 0 ;
}
void end()
{
extern int changeCurrentDirectory( char *path_name_address ) ;
extern int changeDisk( int ) ;
// MOS_end();
EGB_init(ework,1536);
DWORD(para+0) = 0;
SND_elevol_mute(0);
SND_end();
keyin(gwork,para);
if( otherDriveDirectory[0] )
changeCurrentDirectory( otherDriveDirectory ) ;
changeCurrentDirectory( directory ) ;
changeDisk( driveNum ) ;
}
/*
mouse(mmd)
int mmd;
{
int s, x, y;
do{
MOS_rdpos(&sw,&cx,&cy);
}while( sw == 0 );
if( mmd == 0 ){
do{
MOS_rdpos(&s,&x,&y);
}while( s );
}
return 0;
}
*/
itochar(n,count,p) /* n --> char p[count] */
int n,count;
char *p;
{
char dsp[] = "0123456789ABCDEF";
switch( count ){
case 8: *p++ = dsp[ n/10000000 ];
n = n % 10000000;
case 7: *p++ = dsp[ n/1000000 ];
n = n % 1000000;
case 6: *p++ = dsp[ n/100000 ];
n = n % 100000;
case 5: *p++ = dsp[ n/10000 ];
n = n % 10000;
case 4: *p++ = dsp[ n/1000 ];
n = n % 1000;
case 3: *p++ = dsp[ n/100 ];
n = n % 100;
case 2: *p++ = dsp[ n/10 ];
n = n % 10;
case 1: *p++ = dsp[ n ];
*p = (char)0;
}
return 0;
}
/*
gprint( p, x, y )
char *p;
int x,y;
{
int i;
char dsp[86];
EGB_writePage(ework,0);
EGB_color(ework,0,C_COLOR);
EGB_color(ework,2,C_COLOR);
WORD(dsp+0) = x;
WORD(dsp+2) = y;
for ( i=0 ; i<80 ; i++ ){
dsp[ i + 6 ] = (char)( BYTE( p + i ) );
if( dsp[ i + 6 ] == (char)0 )break;
}
WORD(dsp+4) = i;
EGB_writeMode(ework,0);
EGB_sjisString(ework,dsp);
return 0;
}
*/
/****** MOV *****/
/* playv */
/* chek func */
int p_mov_play_check()
{
int sw;
/* Æìê╙:sw ëƒé│éΩé─éóéΘé╞bit off ëƒé│éΩé─é╚éóé╞bit on */
SND_joy_in_1( 0xff, &sw ); /* end check */
sw = (sw ^ 0xff) & 0x30;
if( sw == 0 )return 0;
c01: SND_joy_in_1( 0xff, &sw );
sw = (sw ^ 0xff) & 0x30;
if( sw & 0x10 ){
while( sw == 0x30 ){
SND_joy_in_1( 0xff, &sw );
sw = (sw ^ 0xff) & 0x30;
}
if( sw == 0x20 )goto c02;
while( sw ){
SND_joy_in_1( 0xff, &sw );
sw = (sw ^ 0xff) & 0x30;
if( sw == 0x30 )break;
}
return 1;
}
c02: if( sw )goto c01;
return -1;
}
/* on memory type */
p_mov_memory_play( name, wait, rep, page )
char *name;
int wait, rep;
{
char *work ;
int frame,x0,y0,x1,y1,wsize;
int error;
if( rep <= 0 )rep = 1 ;
error
= mov_memory_play_init( name, p_mov_play_check,&frame,&x0,&y0,&x1,&y1,
&wsize );
if( error )goto vd10;
if( (work = (char *)malloc( wsize+153600 )) == NULL ){
error = 7;
goto vd10; /* out of memory */
}
/* mute */
// int s ;
// SND_get_elevol_mute( &s ) ;
// SND_elevol_mute( s | 0x03 ) ;
error = mov_memory_play_repeat( work, work+153600, name, page, wait, rep);
// SND_elevol_mute( s ) ;
free( work );
vd10:
return error;
}
/* disk read type */
p_mov_disk_play( name, wait, rep, page )
char *name;
int wait, rep;
{
char *work ;
int frame,x0,y0,x1,y1,wsize;
int error;
if( rep <= 0 )rep = 1 ;
error
= mov_disk_play_init( name, p_mov_play_check,&frame,&x0,&y0,&x1,&y1,
&wsize );
if( error )goto vd10;
if( (work = (char *)malloc( wsize+153600 )) == NULL ){
error = 7;
goto vd10; /* out of memory */
}
/* mute */
// int s ;
// SND_get_elevol_mute( &s ) ;
// SND_elevol_mute( s | 0x03 ) ;
error = mov_disk_play_repeat( work, work+153600, name, page, wait, rep);
// SND_elevol_mute( s ) ;
free( work );
vd10:
return error;
}
/* path = fullname(path) + name ìçɼ */
make_path_name( path, fulname, name )
char path[], fulname[], name[];
{
int i, k;
for( k=0 ; k<80 ; k++ ){
path[k] = fulname[k];
if( path[k] == (char)0 )break;
}
for( i=k ; i>=0 ; i-- ){ /* path name ÆèÅo */
if( path[i] == '\\' || path[i] == ':' )break;
}
for( k=0 ; k<13 ; k++ ){
path[i+1+k] = name[k];
if( name[k] == (char)0 )break;
}
return 0;
}
movfile( name, namemov )
char name[], namemov[];
{
int i;
for( i=0 ; i<76 ; i++ ){
namemov[i] = name[i];
if( name[i] == '.' || name[i] == (char)0 )goto mov01;
}
return 55; /* bad file name */
mov01: if( i == 0 )return 55;
namemov[i++] = '.'; namemov[i++] = 'M'; namemov[i++] = 'O';
namemov[i++] = 'V'; namemov[i] = (char)0;
return 0;
}
/* time to frame */
cd_play_frame( time )
char *time;
{
return BYTE(time+2) + BYTE(time+1)*75 + BYTE(time)*75*60;
}
/* frame to time */
cd_play_time( time, s )
char time[];
int s;
{
int temp;
time[2] = (char)(s % 75);
temp = s / 75;
time[1] = (char)(temp % 60);
time[0] = (char)(temp / 60);
return 0;
}
cd_play( time, count )
int time[], count;
{
int type, s, e, i, start, end;
char track[99][3];
char total[3];
char t[3], st[3], en[3], t1[3], t2[3];
if( cdr_mstop(0) == 0 )goto cd01;
/* 1ë±é╛é»é╢éßé╛é▀é╚é▒é╞éαéáéΘ !! */
cd01:
for( i=0 ; i<4 ; i++ )
{
if( cdr_cdinfo(
0, &type, &s, &e,
(struct TIMEADRS *)(track), (struct TIMEADRS *)(total)
) == 0 )goto cd02;
}
return -1;
cd02: ;
/* for cd data check */
/*
char out[10];
EGB_writePage(ework,1);
EGB_clearScreen( ework );
for( j=0 ; j<8 ; j++ ){
for( i=0 ; i<3 ; i++ ){
itochar( (int)track[j][i], 3, out );
gprint( out, i*32, j*40+20 );
}
}
itochar( type, 3, out );
gprint( out, 0, 400 );
itochar( s, 3, out );
gprint( out, 50, 400 );
itochar( e, 3, out );
gprint( out, 100, 400 );
for( i=0 ; i<3 ; i++ ){
itochar( (int)total[i], 3, out );
gprint( out, i*32, 450 );
}
mouse(0);
*/
t[0] = (char)time[1];
t[1] = (char)time[2];
t[2] = (char)time[3];
start = cd_play_frame( t );
if( time[0] < 1 )time[0] = 1;
if( time[0] <= e ){
for( i=time[0]-1 ; i<e ; i++ ){
if( (BYTE( track[i] ) & 0x80) == 0 )break;
}
if( i == e )return -1;
start = start + cd_play_frame( track[i] );
}
else start = cd_play_frame( total ) - 1;
t[0] = (char)time[5];
t[1] = (char)time[6];